﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Drawing;

namespace TangoFamilyAndGuide.Site
{
    public partial class ExploradorUsuarios : System.Web.UI.Page
    {

        protected void Page_Load(object sender, EventArgs e)
        {
            Entidades.Sesion sesion;
            if (!IsPostBack)
            {
                sesion = (Entidades.Sesion)Session["Sesion"];
                EstadoDropDownList.DataSource = RN.Estado.ListaParaUsuario(true, sesion);
                DataBind();
                EstadoDropDownList.SelectedValue = String.Empty;
            }
            else
            {
            }
            sesion = (Entidades.Sesion)Session["Sesion"];
            List<Entidades.Permiso> permisoAdminSITEActive = sesion.Usuario.Permisos.FindAll(delegate(Entidades.Permiso p)
            {
                return p.TipoPermiso.Id == "AdminSITE";
            });
            if (permisoAdminSITEActive.Count == 0)
            {
                Response.Redirect("~/Home.aspx");
            }
        }
        protected void UsuariosGridView_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            switch (e.CommandName)
            {
                case "BajaYAnulBaja":
                    Confirmar("BajaYAnulBaja", e);
                    break;
                case "EnviarEmailPteConf":
                    Confirmar("EnviarEmailPteConf", e);
                    break;
                default:
                    Confirmar("Consultar", e);
                    break;
            }
        }
        private void Confirmar(string Evento, GridViewCommandEventArgs e)
        {
            int item = Convert.ToInt32(e.CommandArgument);
            List<Entidades.Usuario> lista = (List<Entidades.Usuario>)ViewState["Usuarios"];
            Entidades.Usuario usuario = lista[item];

            IdUsuarioLabel.Text = usuario.Id;
            NombreLabel.Text = usuario.Nombre;
            EmailLabel.Text = usuario.Email;
            EstadoLabel.Text = usuario.Estado;

            MensajeLabel.Text = String.Empty;
            switch (e.CommandName)
            {
                case "BajaYAnulBaja":
                    if (usuario.Estado.Equals("Active"))
                    {
                        Evento = "Cancel";
                        TituloConfirmacionLabel.Text = "Confirm cancel";
                    }
                    else if (usuario.Estado.Equals("Canceled"))
                    {
                        Evento = "UndoCancel";
                        TituloConfirmacionLabel.Text = "Confirm undo cancel";
                    }
                    else
                    {
                        MensajeLabel.Text = "You can not make a cancellation or undo cancellation of users in the status: " + usuario.Estado;
                    }
                    break;

                case "EnviarEmailPteConf":
                    if (usuario.Estado.Equals("PteConf"))
                    {
                        Evento = "EnviarEmailPteConf";
                        TituloConfirmacionLabel.Text = "Confirm send email.";
                    }
                    else
                    {
                        MensajeLabel.Text = "This option Email notice is only for users who are in the state: PteConf";
                    }
                    break;
                default:
                    Evento = "Consulta";
                    TituloConfirmacionLabel.Text = "Consulta de usuario";
                    break;
            }
            ViewState["Usuario"] = usuario;
            ViewState["Evento"] = Evento;
            if (MensajeLabel.Text == string.Empty)
            {
                ModalPopupExtender1.Show();
            }
        }
        protected void ConfirmarButton_Click(object sender, EventArgs e)
        {
            if (Funciones.SessionTimeOut(Session))
            {
                Response.Redirect("~/SessionTimeout.aspx");
            }
            else
            {
                MensajeLabel.Text = String.Empty;
                try
                {
                    Entidades.Sesion sesion = (Entidades.Sesion)Session["Sesion"];
                    Entidades.Usuario usuario = (Entidades.Usuario)ViewState["Usuario"];
                    string evento = ViewState["Evento"].ToString();
                    switch (evento)
                    {
                        case "Cancel":
                            RN.Usuario.CambiarEstado(usuario, evento, "Canceled", sesion);
                            break;
                        case "UndoCancel":
                            RN.Usuario.CambiarEstado(usuario, evento, "Active", sesion);
                            break;
                        case "EnviarEmailPteConf":
                            RN.Usuario.EnviarSoloEmailConfirmacionAltaUsuario(usuario, sesion);
                            break;
                    }
                    BuscarButton_Click(BuscarButton, new EventArgs());
                    Funciones.PersonalizarControlesMaster(Master, true, sesion);
                }
                catch (Exception ex)
                {
                    MensajeLabel.Text = "Problemas: " + ex.Message.Replace("'", "") + "\r\n" + "Recuerde refrescar la grilla (botón Buscar) antes de continuar operando.";
                }
            }
        }
        protected void UsuariosGridView_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                if (e.Row.Cells[5].Text != "Active")
                {
                    e.Row.ForeColor = Color.Red;
                }
            }
        }
        protected void BuscarButton_Click(object sender, EventArgs e)
        {
            if (Funciones.SessionTimeOut(Session))
            {
                Response.Redirect("~/SessionTimeout.aspx");
            }
            else
            {
                MensajeLabel.Text = String.Empty;
                Entidades.Sesion sesion = (Entidades.Sesion)Session["Sesion"];
                List<Entidades.Usuario> lista = new List<Entidades.Usuario>();
                lista = RN.Usuario.Lista(IdUsuarioTextBox.Text, NombreTextBox.Text, EstadoDropDownList.SelectedValue, sesion);
                if (lista.Count == 0)
                {
                    UsuariosGridView.DataSource = null;
                    UsuariosGridView.DataBind();
                    MensajeLabel.Text = "No se han encontrado usuarios que satisfagan la busqueda";
                }
                else
                {
                    UsuariosGridView.DataSource = lista;
                    ViewState["Usuarios"] = lista;
                    UsuariosGridView.DataBind();
                }
            }
        }
    }
}